package org.gwt.client.vista;

import java.util.LinkedList;
import java.util.List;

import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.MenuEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.VerticalPanel;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.layout.TableData;
import com.extjs.gxt.ui.client.widget.menu.Menu;
import com.extjs.gxt.ui.client.widget.menu.MenuItem;
import org.gwt.client.controlador.BotonListener;
import org.gwt.client.controlador.MenuListener;

public class PanelEncabezado extends VerticalPanel{

	private static final int MENU_ITEM_PROBLEMA1 = 4;
	private static final int MENU_ITEM_PROBLEMA2 = 5;
	private static final int MENU_ITEM_PROBLEMA3 = 6;
	private static final int BOTON_ACERCA = 0;

	private Menu menuProblemas;
	private MenuItem problema1,problema2, problema3;
	private Button botonAcercaDe;
	private List<MenuListener> listeners;
	private BotonListener botonListenerAcerca;
	LayoutContainer layoutContainerEncabezado;
	private Button botonProblemas;

	public PanelEncabezado() {
		layoutContainerEncabezado = new LayoutContainer();
		layoutContainerEncabezado.setStyleName(".encabezado1");
		setTableWidth("100%");
		setStyleName("encabezado");

		HorizontalPanel horizontalPanelEncabezado = new HorizontalPanel();
		horizontalPanelEncabezado.setTableWidth("100%");
		horizontalPanelEncabezado.setHorizontalAlign(HorizontalAlignment.RIGHT);

		add(horizontalPanelEncabezado);

		//BotonProblemas
		menuProblemas = new Menu();
		problema1 = new MenuItem("Problema 1");
		problema2 = new MenuItem("Problema 2");
		problema3 = new MenuItem("Problema 3");

		layoutContainerEncabezado = new LayoutContainer();
		layoutContainerEncabezado.setSize("0%", "0%");
		layoutContainerEncabezado.setBorders(true);
		TableData tableDataEncabezado = new TableData();
		tableDataEncabezado.setPadding(-20);
		tableDataEncabezado.setWidth("1000px");
		horizontalPanelEncabezado.add(layoutContainerEncabezado, tableDataEncabezado);

		menuProblemas.add(problema1);
		menuProblemas.add(problema2);
		menuProblemas.add(problema3);

		botonProblemas = new Button();
		botonProblemas.setToolTip("Seleccione un problema");
		botonProblemas.setText("Problemas ");
		botonProblemas.setMenu(menuProblemas);

		TableData tableDataBtnProblemas = new TableData();
		tableDataBtnProblemas.setPadding(8);
		tableDataBtnProblemas.setHorizontalAlign(HorizontalAlignment.RIGHT);

		horizontalPanelEncabezado.add(botonProblemas, tableDataBtnProblemas);

		//ButonAcercade
		botonAcercaDe = new Button("Acerca de");
		botonAcercaDe.setStyleAttribute("left", "450px");

		TableData tableDataBtnAcerca = new TableData();
		tableDataBtnAcerca.setPadding(8);
		tableDataBtnAcerca.setHorizontalAlign(HorizontalAlignment.RIGHT);

		horizontalPanelEncabezado.add(botonAcercaDe, tableDataBtnAcerca);

		listeners = new LinkedList<MenuListener>();
		inicializarAccionesDeMenu();
		inicializarBotonAcerca();
	}

	public Button getBotonProblemas(){
		return botonProblemas;
	}

	private void inicializarAccionesDeMenu() {
		problema1.addSelectionListener(new SelectionListener<MenuEvent>() {
			public void componentSelected(MenuEvent ce) {
				for(MenuListener listener: listeners)
					listener.menuEvent(MENU_ITEM_PROBLEMA1);
			}
		});

		problema2.addSelectionListener(new SelectionListener<MenuEvent>() {
			public void componentSelected(MenuEvent ce) {
				for(MenuListener listener: listeners)
					listener.menuEvent(MENU_ITEM_PROBLEMA2);
			}
		});

		problema3.addSelectionListener(new SelectionListener<MenuEvent>() {
			public void componentSelected(MenuEvent ce) {
				for(MenuListener listener: listeners)
					listener.menuEvent(MENU_ITEM_PROBLEMA3);
			}
		});
	}

	private void inicializarBotonAcerca() {
		botonAcercaDe.addSelectionListener(new SelectionListener<ButtonEvent>() {
			public void componentSelected(ButtonEvent ce) {
				botonListenerAcerca.botonEvent(BOTON_ACERCA);
			}
		});
	}

	public void addListener(MenuListener listener){
		listeners.add(listener);
	}

	public void removeListener(MenuListener listener){
		listeners.remove(listener);
	}

	public void addBotonListener(BotonListener listener){
		botonListenerAcerca = listener;
	}

	public void removeListener(BotonListener listener){
		botonListenerAcerca = null;
	}

}
